BigQueryのオブジェクト テーブルで署名付きURLを発行する(プレビュー)

BigQueryのオブジェクト テーブルで署名付きURLを発行する(プレビュー)

BigQueryのオブジェクト テーブル(Object Tables)を使って、 SQLでGoogle Cloud Storage(GCS)上のファイルの署名付きURL(Signed URLs)を作成する。
Clock Icon2023.01.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部、池田です。
前回、BigQueryの新しい機能のオブジェクト テーブルObject Tables)を使ってみました。

【新機能】BigQueryのオブジェクト テーブルを使ってみる(プレビュー)

今回は、 署名付きURLオブジェクト テーブルからSQLで作成できるそうなので試してみます。

オブジェクト テーブルの署名付きURLでは、 そのURLに接続することで、認証無しで対象のGoogle Cloud Storageファイルをダウンロードすることができます。
この方法で作成したURLの有効期限は6時間とのことです。

※オブジェクト テーブルは執筆時点(2023/01)では申請が必要な プレビュー となります。 (後出のEXTERNAL_OBJECT_TRANSFORM関数についてはステージの記載が見つけられませんでした。)

署名付きURL

公式のガイド を基に試しました。

オブジェクト テーブルの作成

オブジェクト テーブルは 前回のブログ のものを使用します。

クリックでコードを表示する/折りたたむ
# クラウド リソースタイプの接続の作成
bq mk --connection --location=us-east1 \
--connection_type=CLOUD_RESOURCE obj-tbls-conn

-- データセットの作成
CREATE SCHEMA my_obj_tbls
OPTIONS(
    location = 'us-east1'
);

-- オブジェクト テーブルの作成
CREATE EXTERNAL TABLE my_obj_tbls.img_sample
WITH CONNECTION `us-east1.obj-tbls-conn`
OPTIONS(
    object_metadata = 'SIMPLE',
    uris = ['gs://{バケット名}/inputs_img/*']
);

署名付きURLの発行

組み込みテーブル関数 という種類の EXTERNAL_OBJECT_TRANSFORM() 関数を使用して、 ↓こんな感じでSQLから簡単に発行できました。

SELECT
  uri,
  signed_url
FROM
  EXTERNAL_OBJECT_TRANSFORM(
    TABLE my_obj_tbls.img_sample,
    ['SIGNED_URL']
);


定額料金を設定していないとエラーになりました。
また、SQLを実行する度に、異なるURLが出力されました。

ファイルのダウンロード

ブラウザに署名付きURLをそのまま張り付けても、認証無しでファイルをダウンロード(今回は画像だったので表示)できました。
curlだとこんな感じでダウンロードできました。

curl -o sample1.png '<作成した署名付きURL>'

おわりに

本来は リモート関数と組み合わせて分析 などをするのかと思いますが、 SQLで署名付きURLを発行できるのは便利そうなので、他の活用方法もありそうだと思っています。

関連情報/参考にさせていただいたページ

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.